#include <head.h>

// 定义信号量
sem_t semA, semB, semC;

// 工序 A 的处理函数
void *processA(void *arg)
{
    printf("工序 A 开始\n");
    // 模拟工序 A 的处理时间
    sleep(1);
    printf("工序 A 完成，释放信号量 semB\n");
    sem_post(&semB);
    return NULL;
}

// 工序 B 的处理函数
void *processB(void *arg)
{
    // 等待信号量 semB
    sem_wait(&semB);
    printf("工序 B 开始\n");
    // 模拟工序 B 的处理时间
    sleep(1);
    printf("工序 B 完成，释放信号量 semC\n");
    sem_post(&semC);
    return NULL;
}

// 工序 C 的处理函数
void *processC(void *arg)
{
    // 等待信号量 semC
    sem_wait(&semC);
    printf("工序 C 开始\n");
    // 模拟工序 C 的处理时间
    sleep(1);
    printf("工序 C 完成\n");
    return NULL;
}

int main(int argc, char const *argv[])
{
    // 初始化信号量
    sem_init(&semA, 0, 1);
    sem_init(&semB, 0, 0);
    sem_init(&semC, 0, 0);

    // 创建线程
    pthread_t threadA, threadB, threadC;
    pthread_create(&threadA, NULL, processA, NULL);
    pthread_create(&threadB, NULL, processB, NULL);
    pthread_create(&threadC, NULL, processC, NULL);

    // 等待线程结束
    pthread_join(threadA, NULL);
    pthread_join(threadB, NULL);
    pthread_join(threadC, NULL);

    // 销毁信号量
    sem_destroy(&semA);
    sem_destroy(&semB);
    sem_destroy(&semC);

    return 0;
}